Sync to latest upstream, including fixes for matching against multiple
authorMatthias Clasen <mclasen@redhat.com>
Mon, 28 Mar 2005 19:32:07 +0000 (19:32 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Mon, 28 Mar 2005 19:32:07 +0000 (19:32 +0000)
2005-03-28  Matthias Clasen  <mclasen@redhat.com>

        * xdgmimeglob.c: Sync to latest upstream,
        including fixes for matching against multiple
        extensions (eg .tar.gz) and for suffix
        patterns which don't start with a dot.

gtk/xdgmime/ChangeLog
gtk/xdgmime/xdgmimeglob.c

index 02bf61bdace200d3186df97d4a86931a33c0f286..95860cf60dfff1d253984aab7317644c2d63edc8 100644 (file)
@@ -1,3 +1,10 @@
+2005-03-28  Matthias Clasen  <mclasen@redhat.com>
+
+       * xdgmimeglob.c: Sync to latest upstream,
+       including fixes for matching against multiple
+       extensions (eg .tar.gz) and for suffix
+       patterns which don't start with a dot.
+
 Sat Mar 19 23:52:33 2005  Manish Singh  <yosh@gimp.org>
 
        * xdgmimeglob.c (_xdg_glob_hash_insert_text): cast away the constness
index e99eb834dfdfc794dcdb22aafd5a35878ce5683f..d1f3f1940c4117847c4ddf0ee0c6695a975af5f6 100644 (file)
@@ -241,8 +241,7 @@ _xdg_glob_hash_insert_text (XdgGlobHashNode *glob_hash_node,
   text = _xdg_utf8_next_char (text);
   if (*text == '\000')
     {
-      if (node->mime_type)
-       free ((void *) node->mime_type);
+      free ((void *) node->mime_type);
       node->mime_type = mime_type;
     }
   else
@@ -290,6 +289,10 @@ _xdg_glob_hash_lookup_file_name (XdgGlobHash *glob_hash,
   XdgGlobList *list;
   const char *mime_type;
   const char *ptr;
+  char stopchars[128];
+  int i;
+  XdgGlobHashNode *node;
+
   /* First, check the literals */
 
   assert (file_name != NULL);
@@ -298,16 +301,26 @@ _xdg_glob_hash_lookup_file_name (XdgGlobHash *glob_hash,
     if (strcmp ((const char *)list->data, file_name) == 0)
       return list->mime_type;
 
-  ptr = strchr (file_name, '.');
-  if (ptr)
+  i = 0;
+  for (node = glob_hash->simple_node; node; node = node->next)
+    {
+      if (node->character < 128)
+       stopchars[i++] = (char)node->character;
+    }
+  stopchars[i] = '\0';
+  ptr = strpbrk (file_name, stopchars);
+  while (ptr)
     {
       mime_type = (_xdg_glob_hash_node_lookup_file_name (glob_hash->simple_node, ptr, FALSE));
       if (mime_type != NULL)
         return mime_type;
-
+      
       mime_type = (_xdg_glob_hash_node_lookup_file_name (glob_hash->simple_node, ptr, TRUE));
       if (mime_type != NULL)
         return mime_type;
+      
+      ptr = strpbrk (ptr + 1, stopchars);
     }
 
   /* FIXME: Not UTF-8 safe */